package educar.models;
/**
 * Cargos.java
 * @import java.sql.PreparedStatement
 * @import java.sql.ResultSet
 * @import java.sql.SQLException
 * @import educar.db.JPA
 * Created on 14 abril-2012, 11:13:51
 */



import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import educar.db.JPA;


/**_____________________________________________________________________________
 *  Gestiona y manipula la esctrucura y modelo de un cargo determinado, 
 *  contiene metodos basico de acceso y manejo con 
 *  base de datos a travez de JPA. 
 *  @version 1.3
 *  @autor Natalia Patricia Lagable. mail:patolagable@gmail.com
 * _____________________________________________________________________________
 */
public final class Cargos {
	private static JPA jpa = new JPA();
         //Atributo usado para cear una instancia que contenga un query
	private String codCargo;
        //cadena para acceder a primer atributo de tabla cargos
	private String descripcion;
         
        
    /**
     * 
     * Cargos(c,d): Contructor para inicializar cargos conteniendo
     *           un codigo y una descripcion
     * 
     * @param codCargo relativa a cada numero de un cargo en especifico
     * @param descripcion nombre para describir la funcion dentro de una facultad
     */
	public Cargos(String codCargo, String descripcion) {
		this.setCodCargo(codCargo);
		this.setDescipcion(descripcion);
	}
        
    /**
     * 
     * Cargos(v):: Constructor que recibe como parametro un vector que contiene
     * los datos de un cargo determinado
     * 
     * @param cargos : esctructura para recorrer todos los cargos 
     */
         public Cargos(String[] cargos) {
		this.setCodCargo(cargos[0]);
		this.setDescipcion(cargos[1]);
	}

         
    /**
     * 
     * existe(c): Verifica existencia de un cargo,
     *            busca mediante su codigo.
     * @param codigo usado para la busqueda de un cargo
     * @return boolean valor verdadero si el codigo es el mismo
     */
        public static boolean exist(String codCargo){
                try 
                {
		 Cargos.getCargoByCod(codCargo);
			return true;
		} 
                 catch (CargoNotFound ex){
                    return false; 
                 }
        }
       
    /**
     * authenticate(c,d): Verifca que no haya otro cargo con el mismo codigo en la base de datos
     * @param codCargo cargo a evaluar si esta cargado
     * @param descripcion a evaluar si esta dentro de las 11 cargadas.
     * @return boolean: valor de verdad si esta cargado en la base de datos 
     * @see CargosNotFound
     */
	public static boolean authenticate(String codCargo, String descripcion) {
		try 
                {
		 Cargos c = getCargoByCod(codCargo);
                 
                 if(codCargo.equals(c.getCodCargo()) && descripcion.equals(c.getDescripcion())) {
			return true;
		 }
		} 
                 catch (CargoNotFound ex){
                    return false; 
                 }
                
		    return false;
	}
        
          
    /**
     * 
     * save(): prepara en el schema edicar_dev la tabla cargos para guardar
     * cada contenido de un cargo y una descripcion
     * 
     * @return boolean : verdadero si logra ingresar un cargo corretamente.
     */
	public boolean save() {
		try {
			Cargos.getCargoByCod(codCargo);
			return false;
		} catch (CargoNotFound e1) {
			String[] columns = { "codCargo", "descripcion"};

			PreparedStatement stm = jpa.newRecord("educar_dev.cargo", columns);

			try {
				stm.setString(1, codCargo);
				stm.setString(2, descripcion);
				
			} catch (SQLException e) {
				return false;
			}

			jpa.create(stm);
			return true;
		}
	}

    /**
     * destroy(): Elimina un carg, mediante su codigo de la base de datos
     */       
	public void destroy() {
		jpa.destroy("cargo","codCargo",this.getCodCargo());
	}
        
    /**
     * 
     * destroyCargoPorCodigoCargo(c): Usado para eliminar un elemento de la base de datos
     * @param codigo a buscar en la base 
     */
        public static void destroyCargoBycodCargo (String codcargo){
                  jpa.destroy("cargo","codCargo",codcargo);
        } 
        
        
    /**
     * setCargoByCodCargo(c): Modifica a un cargo mediante su codigo
     * 
     * @param codigo buscado en la base para actualizar
     */
        public boolean setCargoByCodCargo (String otrocodCargo) {
                jpa.update("cargo", "descripcion",descripcion,"codCargo", otrocodCargo);
                jpa.update("cargo", "codCargo",codCargo,"codCargo", otrocodCargo);
		return true;
	}
        
        
    /**
     * 
     * getCargoPorCod(c): Dado el codigo de un cargo, consulta la base de datos
     * usando este codigo para obtener todos los datos de la misma, en el caso que este 
     * no se encuentre lanza una excepcion.
     * @param codCargo usado para buscar una considencia
     * @return Cargos
     * @throws CargoNotFound 
     */        
	public static Cargos getCargoByCod(String codCargo) throws CargoNotFound {
		ResultSet rs = null;
		Cargos c = null;

		rs = jpa.getByField("cargo","codCargo", codCargo);

		try {
			if (rs.next()) {
				c = new Cargos(rs.getString(1), rs.getString(2));
                                
			} else {
       				throw new CargoNotFound();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}

		return c;
	}
        
      /**
       * Metodos set y get para acceder y modificar  
       * codigo y descripcion de un cargo.
       */ 
         
     /**
      * getCodCargo: Modifica un codigo de cargo
      *  @return codCargo numero relativo al codigo
      */
	public String getCodCargo() {
		return codCargo;
	}

    /**
     * setCargo(c):inicializa un nuevo codcargo 
     *  @param cod
     */
        public void setCodCargo(String cod) {
           this.codCargo = cod;
        
        }
         /**
      * getCodCargo: Modifica una descripcion de cargo
      *  @return descripcion numero relativo al codigo
      */
	public String getDescripcion() {
		return descripcion;
	}
     /**
      * setDescripcion (c):inicializa una descripcion valida entre 11 cargadas  
      *  @param cod posible descripcion a elegir
      */
	public void setDescipcion(String des) {
		this.descripcion = des;
	}
        
}

    



